/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo;

import java.util.ArrayList;
import java.util.Random;
import javax.swing.SwingUtilities;
import ui.PanelBacterias;

/**
 *
 * @author juanan
 */
public class ModeloSimulacion extends Thread {
    
    private PanelBacterias panel;
    
    private int tamanhoPoblacion;
    private int comidaIni;
    private int comidaMax;
    private int diaMax;
    private int comidaFinal;
    private int numDias;
    private int ladoPlato;
    private int [][]bacterias = new int[100][100];
    private int [][]comida = new int[100][100];
    ArrayList<Bacteria> [][] bac;
    
    public int calculaAleatorio()
    {
        Random rand=new Random();
        int aleatorio=(int)rand.nextInt(100);
        return aleatorio;
    }
    
    public void decidir()
    {
        int aleatorio=calculaAleatorio();
        for (int i=0;i<100;i++)
        {
            for (int j=0;j<100;j++)
            {
                bac[0][0].size();
                for (int b=0;b<bac[i][j].size();b++)
                {
                //TODO for para recorrer bacterias
                if(comida[i][j]>10)
                {
                    comida[i][j]-=2;
                    if (aleatorio<3)
                    {
                        bac[i][j].get(b).setMuerta(true);
                    }
                    else
                    {
                        if(aleatorio<60)
                        {
                            //No se mueve la Bacteria
                        }
                        else
                        {
                            mueve(bac[i][j].get(b), i,j,aleatorio, 1);
                        }
                    }
                }
                else
                {
                    if (comida[i][j]==0)
                    {
                        if(aleatorio<20)
                        {
                            bac[i][j].get(b).setMuerta(true);
                        }
                        else
                        {
                            if (aleatorio<60)
                            {
                                //No se mueve la Bacteria
                            }
                            else
                            {
                                mueve(bac[i][j].get(b), i,j,aleatorio, 2);
                            }
                        }
                        
                    }
                    else
                    {
                        comida[i][j]-=1;
                        if (aleatorio<6)
                        {
                            bac[i][j].get(b).setMuerta(true);
                        }
                        else
                        {
                            if(aleatorio<20)
                            {
                                //No se mueve la Bacteria
                            }
                            else
                            {
                                mueve(bac[i][j].get(b), i,j,aleatorio, 3);
                            }
                        }
                    }
                }
            }
            }
        }
    }
    public void mueve(Bacteria bac, int i, int j, int aleatorio, int tipoMovimiento)
    {
        if (tipoMovimiento==1)
        {
            if (aleatorio>=60 && aleatorio < 65)
            {
                i-=1;
                j-=1;
            }
            else 
            {
                if (aleatorio>=65&&aleatorio<70)
                {
                    i-=1;
                    
                }
                else
                {
                    if (aleatorio>=70&&aleatorio<75)
                    {
                        i-=1;
                        j+=1;
                    }
                    else
                    {
                        if (aleatorio>=75&&aleatorio<80)
                        {
                            j-=1;
                        }
                        else
                        {
                            if (aleatorio>=80&&aleatorio<85)
                            {
                                j+=1;
                            }
                            else
                            {
                                if (aleatorio>=85&&aleatorio<90)
                                {
                                    i+=1;
                                    j-=1;
                                }
                                else
                                {
                                    
                                
                                if(aleatorio>=90&&aleatorio<95)
                                {
                                    i+=1;
                                }
                                else
                                {
                                    i+=1;
                                    j+=1;
                                }
                            }
                            }
                        }
                    }
                }
            }
        }
        else
        {
            if (tipoMovimiento==2)
            {
                
            if (aleatorio>=20 && aleatorio < 30)
            {
                
            }
            else 
            {
                if (aleatorio>=30&&aleatorio<40)
                {
                    
                }
                else
                {
                    if (aleatorio>=40&&aleatorio<50)
                    {
                        
                    }
                    else
                    {
                        if (aleatorio>=50&&aleatorio<60)
                        {
                            
                        }
                        else
                        {
                            if (aleatorio>=60&&aleatorio<70)
                            {
                                
                            }
                            else
                            {
                                if (aleatorio>=70&&aleatorio<80)
                                {
                                    
                                }
                                else
                                {
                                    
                                }
                                if(aleatorio>=80&&aleatorio<90)
                                {
                                    
                                }
                                else
                                {
                                    
                                }
                            }
                        }
                    }
                }
            }
            }
            else
            {
                
            if (aleatorio>=60 && aleatorio < 65)
            {
                
            }
            else 
            {
                if (aleatorio>=65&&aleatorio<70)
                {
                    
                }
                else
                {
                    if (aleatorio>=70&&aleatorio<75)
                    {
                        
                    }
                    else
                    {
                        if (aleatorio>=75&&aleatorio<80)
                        {
                            
                        }
                        else
                        {
                            if (aleatorio>=80&&aleatorio<85)
                            {
                                
                            }
                            else
                            {
                                if (aleatorio>=85&&aleatorio<90)
                                {
                                    
                                }
                                else
                                {
                                    
                                }
                                if(aleatorio>=90&&aleatorio<95)
                                {
                                    
                                }
                                else
                                {
                                    
                                }
                            }
                        }
                    }
                }
            }
            }
        }
    }
    public ModeloSimulacion(PanelBacterias panel, int tamanhoPoblacion,
            int comidaIni, int comidaMax, int diaMax, int comidaFinal,
            int numDias, int ladoPlato) {
        this.panel = panel;
        
        this.tamanhoPoblacion = tamanhoPoblacion;
        this.comidaIni = comidaIni;
        this.comidaMax = comidaMax;
        this.diaMax = diaMax;
        this.comidaFinal = comidaFinal;
        this.numDias = numDias;
        this.ladoPlato = ladoPlato;
    }
    
    public void pintarDia(final int numDia, final int [][]bacterias) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                panel.pintarDia(numDia, bacterias);
            }
        });
    }
    
    @Override
    public void run() {
        //Primero se hace el reparto inicial de las bacterias
        repartirBacteriasInicial();
        
        //Antes de hacer nada más, visualiza como se han repartido
        //Deberia salir un cuadrado en el centro pintado de rojo
        //Que es donde se tienen que situar las bacterias según el PDF
        

        
        for(int i=0; i<ladoPlato; i++) {
            for(int j=0; j<ladoPlato; j++) {
                bacterias[i][j] = bac[i][j].size();
            }
        }
        
        pintarDia(1, bacterias);
    }
    
    private void repartirBacteriasInicial() {
        bac = new ArrayList[ladoPlato][ladoPlato];
        
        //Inicializamos el arraylist
        for(int i=0; i<ladoPlato; i++) {
            for(int j=0; j<ladoPlato; j++) {
                bac[i][j] = new ArrayList<Bacteria>();
            }
        }
        
        //Haz lo calculos de posicionar, por ejemplo para que veas como se pinta

        for(int i=0; i<tamanhoPoblacion; i++) {

            bac[0][0].add(new Bacteria());
        }
        
    }
    
    private class Bacteria {
        private int hacomido;
        private boolean calculada;
        private boolean muerta;
        
        public Bacteria() {
            hacomido = 0;
            calculada = false;
            muerta = false;
        }
        
        public void resetearBacteria() {
            hacomido = 0;
            calculada = false;
            muerta = false;
        }
        
        public void come(int comida) {
            hacomido = hacomido + comida;
        }
        
        public void setMuerta(boolean muerta) {
            this.muerta = muerta;
        }
        
        public boolean isMuerta() {
            return muerta;
        }
        
        public void setCalculada(boolean calculado) {
            this.calculada = calculado;
        }
        
        public boolean isCalculada() {
            return calculada;
        }
    }
}
